﻿
namespace Win.DataServices.Web.Model
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Objects.DataClasses;
    using System.Linq;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;


    // The MetadataTypeAttribute identifies PersonMetadata as the class
    // that carries additional metadata for the Person class.
    [MetadataTypeAttribute(typeof(Person.PersonMetadata))]
    public partial class Person
    {

        // This class allows you to attach custom attributes to properties
        // of the Person class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class PersonMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private PersonMetadata()
            {
            }

            public string Email { get; set; }

            public string FirstName { get; set; }

            public int Id { get; set; }

            public string LastName { get; set; }

            public string Password { get; set; }

            public EntityCollection<PersonRole> PersonRoles { get; set; }

            public EntityCollection<SpeakerSession> SpeakerSessions { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies PersonRoleMetadata as the class
    // that carries additional metadata for the PersonRole class.
    [MetadataTypeAttribute(typeof(PersonRole.PersonRoleMetadata))]
    public partial class PersonRole
    {

        // This class allows you to attach custom attributes to properties
        // of the PersonRole class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class PersonRoleMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private PersonRoleMetadata()
            {
            }

            public int Id { get; set; }

            public Person Person { get; set; }

            public Nullable<int> PersonId { get; set; }

            public Nullable<int> RoleId { get; set; }

            public RoleType RoleType { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies RoleTypeMetadata as the class
    // that carries additional metadata for the RoleType class.
    [MetadataTypeAttribute(typeof(RoleType.RoleTypeMetadata))]
    public partial class RoleType
    {

        // This class allows you to attach custom attributes to properties
        // of the RoleType class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class RoleTypeMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private RoleTypeMetadata()
            {
            }

            public int Id { get; set; }

            public EntityCollection<PersonRole> PersonRoles { get; set; }

            public string RoleName { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies SessionMetadata as the class
    // that carries additional metadata for the Session class.
    [MetadataTypeAttribute(typeof(Session.SessionMetadata))]
    public partial class Session
    {

        // This class allows you to attach custom attributes to properties
        // of the Session class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class SessionMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private SessionMetadata()
            {
            }

            public Nullable<int> CategoryId { get; set; }

            public string Description { get; set; }

            public int Id { get; set; }

            public Nullable<DateTime> SessionDateTime { get; set; }

            public EntityCollection<SpeakerSession> SpeakerSessions { get; set; }

            public string Tags { get; set; }

            public string Title { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies SpeakerSessionMetadata as the class
    // that carries additional metadata for the SpeakerSession class.
    [MetadataTypeAttribute(typeof(SpeakerSession.SpeakerSessionMetadata))]
    public partial class SpeakerSession
    {

        // This class allows you to attach custom attributes to properties
        // of the SpeakerSession class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class SpeakerSessionMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private SpeakerSessionMetadata()
            {
            }

            public int Id { get; set; }

            public Person Person { get; set; }

            public int PersonId { get; set; }

            public Session Session { get; set; }

            public int SessionId { get; set; }
        }
    }
}
